//package util;
//
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.Comparator;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import matrix.db.AttributeType;
//import matrix.db.AttributeTypeList;
//import matrix.db.BusinessType;
//import matrix.db.BusinessTypeList;
//import matrix.db.Context;
//import matrix.db.ErrorObject;
//import matrix.db.RelationshipType;
//import matrix.db.RelationshipTypeList;
//import adapletplugin.Activator;
//
//public class MatrixUtils
//{
//	private static BusinessTypeList typeList;
//	private static RelationshipTypeList relationList;
//	private static AttributeTypeList attributeList;
//	
//	private static List<BusinessType> sortedTypeList;
//	private static List<RelationshipType> sortedRelationList;
//	private static List<AttributeType> sortedAttributeList;
//	
//	private static Map<String, List<AttributeType>> attributesPerType;
//	
//	public static final Comparator<ErrorObject> errorObjectComparator = new Comparator<ErrorObject>(){
//
//		@Override
//		public int compare(ErrorObject o1, ErrorObject o2)
//		{
//			return o1.getName().compareToIgnoreCase(o2.getName());
//		}
//		
//	};
//	
//	private static void downloadTypeInfo() throws Exception
//	{
//		Context context = Activator.getDefault().getContext();
//		
//		if(typeList == null)
//		{
//			typeList = BusinessType.getBusinessTypes(context, true);
//			
//			sortedTypeList = new ArrayList<BusinessType>();
//			
//			for(Object busType : typeList)
//			{
//				sortedTypeList.add((BusinessType) busType);
//			}
//			
//			Collections.sort(sortedTypeList, errorObjectComparator);
//		}
//		
//		
//	}
//	
//	private static void downloadRelationInfo() throws Exception
//	{
//		Context context = Activator.getDefault().getContext();
//		
//		if(relationList == null)
//		{
//			relationList = RelationshipType.getRelationshipTypes(context, true);
//			
//			sortedRelationList = new ArrayList<RelationshipType>();
//			
//			for(Object relType : relationList)
//			{
//				sortedRelationList.add((RelationshipType) relType);
//			}
//			
//			Collections.sort(sortedRelationList, errorObjectComparator);
//		}
//		
//		
//	}
//	
//	private static void downloadAttributeInfo() throws Exception
//	{
//		Context context = Activator.getDefault().getContext();
//		
//		if(attributeList == null)
//		{
//			attributeList = AttributeType.getAttributeTypes(context, true);
//			
//			sortedAttributeList = new ArrayList<AttributeType>();
//			
//			for(Object attrType : attributeList)
//			{
//				sortedAttributeList.add((AttributeType) attrType);
//			}
//			
//			Collections.sort(sortedAttributeList, errorObjectComparator);
//		}
//	}
//	
//	public static List<BusinessType> getTypeList() throws Exception
//	{
//		if(sortedTypeList == null)
//		{
//			downloadTypeInfo();
//		}
//		
//		return sortedTypeList;
//	}
//	
//	public static List<RelationshipType> getRelationList() throws Exception
//	{
//		if(sortedRelationList == null)
//		{
//			downloadRelationInfo();
//		}
//		
//		return sortedRelationList;
//	}
//	
//	public static List<AttributeType> getAttributeList() throws Exception
//	{
//		if(sortedAttributeList == null)
//		{
//			downloadAttributeInfo();
//		}
//		return sortedAttributeList;
//	}
//	
//	public static List<AttributeType> getAttributesForType(String typeName)
//	{
//		return attributesPerType.get(typeName);
//	}
//	
//	public static void retrieveEnoviaSchema()
//	{
//		try{
//			downloadAttributeInfo();
//			downloadRelationInfo();
//			downloadTypeInfo();
//			
//			downloadTypeAttributeInfo();
//		}catch(Exception e)
//		{
//			//TODO Catch Exception
//			System.out.println("Error downloading Schema");
//		}
//	}
//	
//	private static void downloadTypeAttributeInfo() throws Exception
//	{
//		attributesPerType = new HashMap<String, List<AttributeType>>();
//		
//		Context context = Activator.getDefault().getContext();
//		
//		for(BusinessType type : sortedTypeList)
//		{
//			AttributeTypeList attributes = type.getAttributeTypes(context);
//			List<AttributeType> tempList = new ArrayList<AttributeType>();
//			
//			for(Object attrObj : attributes)
//			{
//				tempList.add((AttributeType) attrObj);
//			}
//			
//			Collections.sort(tempList, errorObjectComparator);
//			
//			attributesPerType.put(type.getName(), tempList);
//		}
//	}
// }
